
package br.mil.eb.decex.ati.ordemservico;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import br.mil.eb.decex.ati.material.Material;
import br.mil.eb.decex.ati.material.MaterialRN;
import br.mil.eb.decex.ati.usuario.Usuario;
import br.mil.eb.decex.ati.usuario.UsuarioRN;

@ManagedBean(name= "registroOs")
@ViewScoped
public class RegistroOsBean {
	
	private Usuario usuarioSelecionado;
	private Material materialSelecionado = new Material();
	private List<Material> materialUtilizado = new ArrayList<Material>();
	private List<SelectItem> usuarioSelect;	
	private float valorTotal;	
	
	public String buscarMaterial(){		
		
		MaterialRN materialRN = new MaterialRN();
		Material materialPesquisado = new Material();
		
		if(this.materialSelecionado.getDescricao() != null && !this.materialSelecionado.getDescricao().equals("")){
			materialPesquisado = materialRN.pesquisarPorDescricao(this.materialSelecionado.getDescricao());
			
			if(materialPesquisado != null){
				
				this.materialUtilizado.add(materialPesquisado);				
				calculaTotal();
				
			}
		}
		return null;
	}

	private void calculaTotal() {
		this.valorTotal = 0;
		if (!this.materialUtilizado.isEmpty()){
			for (Material mat : this.materialUtilizado){
				valorTotal += mat.getValor();
			}
			
		}
		
	}
	
	public String finalizarOs(){
		
		if(!this.materialUtilizado.isEmpty()){
			ArrayList<OrdemServico> ordemServicos = new ArrayList<OrdemServico>();
			OrdemServicoRN ordemServicoRN = new OrdemServicoRN();
			
			for(Material mat : this.materialUtilizado) {
				
				if(this.usuarioSelecionado != null){
					if(ordemServicoRN.existeEstoque(mat)){
				ordemServicos.add(new OrdemServico(mat, this.usuarioSelecionado));
				}
			}
		}
		for (OrdemServico ordemServico : ordemServicos){			
			ordemServico.setDataSaida(new Date());
			ordemServicoRN.registraOrdemServico(ordemServico);
			ordemServicoRN.reduzEstoqueMaterial(ordemServico.getMaterial());
		}
		
	}
		
	 return null;
	}
	
	public String excluirMaterialUtilizado(){
		if(this.materialSelecionado != null && !this.materialUtilizado.isEmpty()){
			if(this.materialSelecionado != null){
				this.materialUtilizado.remove(this.materialSelecionado);
				calculaTotal();
			}
		}
		return null;
	}
	
	public Usuario getUsuarioSelecionado() {
		return usuarioSelecionado;
	}

	public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
		this.usuarioSelecionado = usuarioSelecionado;
	}

	public Material getMaterialSelecionado() {
		return materialSelecionado;
	}

	public void setMaterialSelecionado(Material materialSelecionado) {
		this.materialSelecionado = materialSelecionado;
	}

	public List<Material> getMaterialUtilizado() {
		return materialUtilizado;
	}

	public void setMaterialUtilizado(List<Material> materialUtilizado) {
		this.materialUtilizado = materialUtilizado;
	}

	public float getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(float valorTotal) {
		this.valorTotal = valorTotal;
	}	
	public List<SelectItem> getUsuarioSelect() {
		
		if(usuarioSelect == null){
			
			usuarioSelect = new ArrayList<SelectItem>();			
			UsuarioRN usuarioRN = new UsuarioRN();			
			List<Usuario> listaUsuarios = usuarioRN.listar();
			
			if(listaUsuarios != null && !listaUsuarios.isEmpty()){
				SelectItem item;
				for (Usuario usuarioLista : listaUsuarios){					
					item = new SelectItem(usuarioLista, usuarioLista.getUsu_nomeguerra());
					usuarioSelect.add(item);
					
				}
			}
			
		}
		
		return usuarioSelect;
	}
	public void setUsuarioSelect(List<SelectItem> usuarioSelect){
		this.usuarioSelect = usuarioSelect;
	}
}
